// myredirect.c
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
    if (argc < 4) {
        fprintf(stderr, "Usage: %s -t n command args...\n", argv[0]);
        return 1;
    }

    int type = atoi(argv[2]);
    const char *cmd = argv[3];

    if (type < 1 || type > 3) {
        fprintf(stderr, "Invalid type. Type must be 1, 2, or 3.\n");
        return 1;
    }

    int fd;
    if (type == 1) { // 标准输出重定向
        fd = open("output.txt", O_WRONLY | O_CREAT | O_TRUNC, 0666);
        if (fd == -1) {
            perror("open");
            return 1;
        }
        dup2(fd, 1);
        close(fd);
    } else if (type == 2) { // 标准输入重定向
        fd = open("input.txt", O_RDONLY);
        if (fd == -1) {
            perror("open");
            return 1;
        }
        dup2(fd, 0);
        close(fd);
    } else if (type == 3) { // 错误输出重定向
        fd = open("error.txt", O_WRONLY | O_CREAT | O_TRUNC, 0666);
        if (fd == -1) {
            perror("open");
            return 1;
        }
        dup2(fd, 2);
        close(fd);
    }

    // 构建命令参数数组
    char *args[100];
    int i;
    for (i = 4; i < argc; i++) { // 从第四个参数开始
        args[i - 4] = argv[i];
    }
    args[i - 4] = NULL;

    execvp(cmd, args);

    return 0;
}
